package dao;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.faces.event.ActionEvent;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.criteria.CriteriaQuery;
import javax.swing.JOptionPane;

import model.Cliente;
import util.JPAUtil;

public class ClienteDAO {
	
	public void insert(Cliente cliente) {
		System.out.println("insert()");
		EntityManager em = JPAUtil.getEntityManager();
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		em.persist(cliente);
		tx.commit();
		em.clear();
	}
	
	public void update(Cliente cliente){
		System.out.println("update()");
		EntityManager em = JPAUtil.getEntityManager();
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		em.merge(cliente);
		tx.commit();
		em.clear();
	}
	
	public Cliente searchById(String value){
		System.out.println("searchById()");
		List<Cliente> lsClientes = selectAll();
		System.out.println(lsClientes.get(2).getNome());
		for(int i = 0; i < lsClientes.size(); i++){
			if(lsClientes.get(i).getId() == Long.parseLong(value)){
				return lsClientes.get(i);
			}
		}
		System.out.println("Nao encontrou ninguem com o searchById()");
		return null;
	}
	
	public void delete(Cliente cliente){
		System.out.println("delete()");
		EntityManager em = JPAUtil.getEntityManager();
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		em.remove(em.merge(cliente));
		tx.commit();
		em.clear();
	}
	
	public List<Cliente> selectAll() {
		System.out.println("selectAll()");
		EntityManager em = JPAUtil.getEntityManager();
		CriteriaQuery<Cliente> query = em.getCriteriaBuilder().createQuery(Cliente.class);
		query.select(query.from(Cliente.class));

		List<Cliente> lista = em.createQuery(query).getResultList();

		em.close();
		
		return lista;
	}
	
	public List<String> listarClientes(){
		System.out.println("listatClientes()");
		List<Cliente> lsCliente = selectAll();
		List<String> lsNomesClientes = new ArrayList<String>();
		for (int i = 0; i < lsCliente.size(); i++)
			lsNomesClientes.add(lsCliente.get(i).getNome());
		
		return lsNomesClientes;
	}
}
